์ฌ๋ฌ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ๊ต์ฐจ ์ ์ฉํ์ฌ ๋ฐ์์ฑ์ด ๋ฐ์ด๋๊ณ ์ ์์ฑ์ด ๋์ ์น ๋ ์ด์์์ ๋ง๋๋ ๊ณ ๊ธ CSS ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ธฐ์ ์ ํ์ํฉ๋๋ค. ์ค์ ๊ตฌํ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐฐ์๋ณด์ธ์.
CSS ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ: ๋ค์ค ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์กฐํฉ ๋ง์คํฐํ๊ธฐ
์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ ๋ทฐํฌํธ๊ฐ ์๋ ์ปจํ ์ด๋์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์์๊ฐ ์ ์ํ๋๋ก ํ์ฌ ๋ฐ์ํ ์น ๋์์ธ์ ํ๋ช ์ ์ผ์ผํค๊ณ ์์ต๋๋ค. ๋จ์ผ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ ๊ฐ๋ ฅํ์ง๋ง, ์ฌ๋ฌ ์ฟผ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ ๋ณต์กํ๊ณ ๋ฏธ๋ฌํ ๋ฐ์ํ ๋์์ ๋ง๋ค ๋ ์ง์ ํ ๋ง๋ฒ์ด ์ผ์ด๋ฉ๋๋ค. ์ด ํฌ์คํธ์์๋ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ์ ๊ฐ๋ ์ ๊น์ด ํ๊ณ ๋ค์ด, ์ง์ ์ผ๋ก ์ ์์ฑ ์๋ ์น ๋ ์ด์์์ ๋ง๋๋ ์ค์ฉ์ ์ธ ์์ ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ์ ํ ์ดํดํ๊ธฐ
๊ต์ฐจ์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ ์ ์ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ์ ๊ธฐ๋ณธ ์์น์ ๋ณต์ตํด ๋ณด๊ฒ ์ต๋๋ค.
๊ธฐ์กด์ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ ๋ทฐํฌํธ ํฌ๊ธฐ(์: ํ๋ฉด ๋๋น)์ ์์กดํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ปดํฌ๋ํธ๊ฐ ํ์ด์ง ๋ด ์์น์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ ์ํด์ผ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ํ์ ์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์นด๋ ์ปดํฌ๋ํธ๋ ์ฌ์ด๋๋ฐ(์ข์ ์ปจํ ์ด๋)์ ์์ ๋์ ๋ฉ์ธ ์ฝํ ์ธ ์์ญ(๋์ ์ปจํ ์ด๋)์ ์์ ๋ ๋ ์ด์์์ด ๋ค๋ฅผ ์ ์์ต๋๋ค.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ ์ปดํฌ๋ํธ๊ฐ ๋ถ๋ชจ ์ปจํ ์ด๋์ ํฌ๊ธฐ๋ฅผ ์ฟผ๋ฆฌํ ์ ์๋๋ก ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปดํฌ๋ํธ์ ์ปจํ ์คํธ์ ๋ฐ๋ผ ์คํ์ผ๋ง์ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ
๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ์ปจํ
์ด๋๋ฅผ ์ ์ํ ๋ค์ @container ๊ท์น์ ์ฌ์ฉํ์ฌ ํฌ๊ธฐ์ ๋ฐ๋ผ ์คํ์ผ์ ์ ์ฉํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ๋ค์์ ๊ฐ๋จํ ์์์
๋๋ค.
.container {
container: my-container / inline-size;
}
@container my-container (min-width: 600px) {
.element {
color: blue;
}
}
์ด ์์์์:
.container๋ ์ปจํ ์ด๋ ์์์ ๋๋ค.container: my-container / inline-size;๋ ์ด ์์๋ฅผ "my-container"๋ผ๋ ์ด๋ฆ์ ์ปจํ ์ด๋๋ก ์ค์ ํ๊ณ , `inline-size`(๊ฐ๋ก ์ฐ๊ธฐ ๋ชจ๋์์์ ๋๋น)๋ฅผ ์ถ์ ํฉ๋๋ค. `block-size`(๋์ด)๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. `container: my-container`๋ง ์ฌ์ฉํ๋ฉด ๋ ์ด์์, ์คํ์ผ ๋๋ ์ํ ํฌํจ๊ณผ ๊ฐ์ด ํฌํจ์ด ๋ช ์์ ์ผ๋ก ์ ์ฉ๋ ํ์๋ง ํฌ๊ธฐ ์ฟผ๋ฆฌ๊ฐ ํ์ฑํ๋๋ฉฐ, ์ด๋ ๊ธฐ๋ณธ ํฌ๊ธฐ ์ฟผ๋ฆฌ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค.@container my-container (min-width: 600px)๋ ์ปจํ ์ด๋์ ๋๋น๊ฐ 600ํฝ์ ์ด์์ผ ๋๋ง.element์ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ๋ ๋ฌด์์ธ๊ฐ?
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ๋ ์ฌ๋ฌ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ ํน์ ์กฐ๊ฑด์ ๋์์ผ๋ก ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. "AND" ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์์ต๋๋ค. ์คํ์ผ์ ๋ช ์๋ ๋ชจ๋ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋๋ง ์ ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๋จ์ผ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ณด๋ค ๋ ์ ๋ฐํ๊ณ ๋ฌธ๋งฅ์ ๋ง๋ ์คํ์ผ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
์นด๋ ์ปดํฌ๋ํธ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ง ํน์ ๋ฐฉ์์ผ๋ก ํ์๋๊ธฐ๋ฅผ ์ํ๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ณด์ธ์:
- ์ปจํ ์ด๋์ ๋๋น๊ฐ 400px ์ด์์ผ ๋.
- ์ปจํ ์ด๋์ ๋์ด๊ฐ 300px ์ด์์ผ ๋.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ ๊ตฌํํ๊ธฐ
CSS์์ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
1. ์ฌ๋ฌ @container ๊ท์น ์ฌ์ฉํ๊ธฐ (์ค์ฒฉ)
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ @container ๊ท์น์ ์ค์ฒฉํ๋ ๊ฒ์
๋๋ค. ์ด๋ ํจ๊ณผ์ ์ผ๋ก "AND" ์กฐ๊ฑด์ ๋ง๋ญ๋๋ค. ๋ด๋ถ ์ฟผ๋ฆฌ๋ ์ธ๋ถ ์ฟผ๋ฆฌ์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉ๋ฉ๋๋ค.
.container {
container: card-container / inline-size block-size;
}
@container card-container (min-width: 400px) {
@container card-container (min-height: 300px) {
.card {
background-color: lightgreen;
padding: 1em;
}
}
}
์ด ์์์์ .card๋ ์ปจํ
์ด๋์ ๋๋น๊ฐ 400px ์ด์์ด๊ณ ๋ํ ๋์ด๊ฐ 300px ์ด์์ผ ๋๋ง ์ฐ๋์ ๋ฐฐ๊ฒฝ๊ณผ ํจ๋ฉ์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
์ฅ์ :
- ์ดํดํ๊ณ ๊ตฌํํ๊ธฐ ์ฝ์ต๋๋ค.
- ๊ฐ๋จํ ๊ต์ฐจ์ ์ ํฉํฉ๋๋ค.
๋จ์ :
- ์กฐ๊ฑด์ด ๋ง์์ง๋ฉด ์ฅํฉํด์ง๊ณ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
- ์ค์ฒฉ์ด ๊น์ด์ง์๋ก ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋๋ค.
2. CSS ์ฌ์ฉ์ ์ ์ ์์ฑ(๋ณ์) ์ฌ์ฉํ๊ธฐ
์ด ๋ฐฉ๋ฒ์ CSS ์ฌ์ฉ์ ์ ์ ์์ฑ(๋ณ์)์ ํ์ฉํ์ฌ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ถ๋ฆฌ์ธ ๊ฐ์ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๋ณ์๋ค์ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด๋ถ๋ก ์คํ์ผ์ ์ ์ฉํ ์ ์์ต๋๋ค.
.container {
container: card-container / inline-size block-size;
--is-wide: 0;
--is-tall: 0;
}
@container card-container (min-width: 400px) {
.container {
--is-wide: 1;
}
}
@container card-container (min-height: 300px) {
.container {
--is-tall: 1;
}
}
.card {
background-color: white; /* Default background */
padding: 0.5em; /* Default padding */
}
.card:has(~ .container[style*="--is-wide: 1"][style*="--is-tall: 1"]) {
background-color: lightgreen;
padding: 1em;
}
์๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ปจํ
์ด๋์ ๋ ๊ฐ์ ์ฌ์ฉ์ ์ ์ ์์ฑ์ธ
--is-wide์--is-tall์0์ผ๋ก ์ด๊ธฐํํฉ๋๋ค. - ์ฒซ ๋ฒ์งธ ์ปจํ
์ด๋ ์ฟผ๋ฆฌ๋ ์ปจํ
์ด๋ ๋๋น๊ฐ 400px ์ด์์ด๋ฉด
--is-wide๋ฅผ1๋ก ์ค์ ํฉ๋๋ค. - ๋ ๋ฒ์งธ ์ปจํ
์ด๋ ์ฟผ๋ฆฌ๋ ์ปจํ
์ด๋ ๋์ด๊ฐ 300px ์ด์์ด๋ฉด
--is-tall์1๋ก ์ค์ ํฉ๋๋ค. - ๋ง์ง๋ง์ผ๋ก,
:has()์์ฌ ํด๋์ค ์ ํ์์ ์์ฑ ์ ํ์๋ฅผ ์ฌ์ฉํ์ฌ--is-wide์--is-tall์ด ๋ชจ๋1๊ณผ ๊ฐ์์ง ํ์ธํฉ๋๋ค. ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด, ์นด๋์ ์ํ๋ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค. ์ด๋.container์.card๊ฐ ํ์ ์์์ด๊ณ ,.card๊ฐ.container์์ ์จ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. HTML ๊ตฌ์กฐ์ ๋ง๊ฒ ์ ํ์๋ฅผ ์กฐ์ ํ์ธ์. ์ด ์ ํ์๋ ํน์ ๊ตฌํ ๋ฐ:has()์ ๋ํ ๋ธ๋ผ์ฐ์ ์ง์์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ์ํด ์กฐ์ ์ด ํ์ํ ์ ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ ํด๋ฐฑ ๋๋ ํด๋ฆฌํ ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์.
์ฅ์ :
- ํนํ ๋ง์ ์กฐ๊ฑด์ด ์์ ๋ ์ค์ฒฉ๋
@container๊ท์น๋ณด๋ค ๋ ๊ฐ๊ฒฐํฉ๋๋ค. - ๊ฐ๋ ์ฑ์ด ํฅ์๋ฉ๋๋ค.
๋จ์ :
- ๋ ๊ณ ๊ธ CSS ์ง์(์ฌ์ฉ์ ์ ์ ์์ฑ ๋ฐ ์์ฑ ์ ํ์)์ด ํ์ํฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ์์ฑ์ ๊ณ์ฐ ๋ฐ ์ ์ฉ์ผ๋ก ์ธํด ์ง์ ์ ์ธ
@container๊ท์น๋ณด๋ค ์ฝ๊ฐ ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์ต๋๋ค. - ์ผ๋ถ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ๋ธ๋ผ์ฐ์ ์ง์์ด ์ ํ๋ ์ ์๋
:has()์์ฌ ํด๋์ค์ ์์กดํฉ๋๋ค.
3. JavaScript ์ฌ์ฉํ๊ธฐ (ํด๋ฐฑ/๊ธฐ๋ฅ ํฅ์)
CSS๋ง์ผ๋ก ๋ฐ์ํ ๋์์ ๊ตฌํํ๋ ๊ฒ์ด ๋ชฉํ์ด์ง๋ง, ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ํด๋ฐฑ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ํ์ฌ CSS๋ง์ผ๋ก๋ ๋ถ๊ฐ๋ฅํ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ธฐ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด JavaScript๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ ํฌํจํฉ๋๋ค:
- ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ง์ ์ฌ๋ถ ๊ฐ์งํ๊ธฐ.
- JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ํฌ๊ธฐ ์ธก์ ํ๊ธฐ.
- ์ปจํ ์ด๋ ํฌ๊ธฐ์ ๋ฐ๋ผ CSS ํด๋์ค ์ถ๊ฐ ๋๋ ์ ๊ฑฐํ๊ธฐ.
์ด ๋ฐฉ๋ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ณต์กํ๋ฉฐ ๋๋ฌผ๊ฒ ์ฌ์ฉํด์ผ ํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํ ์ ์์ต๋๋ค:
- ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ์์ ํ ์ง์ํ์ง ์๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์ง์ํ๊ธฐ.
- CSS๋ก ํํํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ ๋ณต์กํ ๋ก์ง ๊ตฌํํ๊ธฐ.
- ์ปจํ ์ด๋ ์ฝํ ์ธ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์คํ์ผ ์กฐ์ ํ๊ธฐ.
์์ (๊ฐ๋ ์ - ์ ์ฒด ๊ตฌํ ํ์):
// Check for container query support (simplified)
const supportsContainerQueries = CSS.supports('container-type', 'inline-size');
if (!supportsContainerQueries) {
// Fallback using JavaScript
const container = document.querySelector('.container');
const card = document.querySelector('.card');
function updateCardStyle() {
const width = container.offsetWidth;
const height = container.offsetHeight;
if (width >= 400 && height >= 300) {
card.classList.add('card--large');
} else {
card.classList.remove('card--large');
}
}
// Initial update
updateCardStyle();
// Update on resize (consider debouncing for performance)
window.addEventListener('resize', updateCardStyle);
}
์ฅ์ :
- ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ํด๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
- ๋ ๋ณต์กํ ๋ก์ง๊ณผ ๋์ ์กฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋จ์ :
- JavaScript ์์กด์ฑ์ด ์ถ๊ฐ๋ฉ๋๋ค.
- ๊ตฌํํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋ ๋ณต์กํฉ๋๋ค.
- ์ฃผ์ ๊น๊ฒ ๊ตฌํํ์ง ์์ผ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ์ ์ค์ ์์
์ค์ ์๋๋ฆฌ์ค์์ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ ์๋์ง ๋ช ๊ฐ์ง ์ค์ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ๋ฐ์ํ ๋ด๋น๊ฒ์ด์ ๋ฉ๋ด
์ปจํ ์ด๋์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณต๊ฐ์ ๋ฐ๋ผ ์ ์ํ๋ ๋ด๋น๊ฒ์ด์ ๋ฉ๋ด๋ฅผ ์์ํด ๋ณด์ธ์. ์ปจํ ์ด๋๊ฐ ์ถฉ๋ถํ ๋์ผ๋ฉด ๋ฉ๋ด ํญ๋ชฉ์ด ์ํ์ผ๋ก ํ์๋ฉ๋๋ค. ์ปจํ ์ด๋๊ฐ ์ข์ผ๋ฉด ๋ฉ๋ด ํญ๋ชฉ์ด ํ๋ฒ๊ฑฐ ๋ฉ๋ด๋ก ์ถ์๋ฉ๋๋ค.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋์ ๋๋น๊ฐ ํน์ ์๊ณ๊ฐ ๋ฏธ๋ง์ด๊ณ ๋ํ ๋ทฐํฌํธ๋ ํน์ ๋๋น ๋ฏธ๋ง์ผ ๋(์: ๋ชจ๋ฐ์ผ ์ฅ์น)๋ง ํ๋ฒ๊ฑฐ ๋ฉ๋ด๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค.
/* CSS (Conceptual) */
.nav-container {
container: nav-container / inline-size;
}
@container nav-container (max-width: 600px) {
@media (max-width: 768px) { /* Viewport width check */
.nav-menu {
display: none; /* Hide regular menu */
}
.hamburger-menu {
display: block; /* Show hamburger menu */
}
}
}
์ด ์์๋ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ์ ๊ธฐ์กด ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ ๋ ๋ฏธ๋ฌํ ๋ฐ์ํ ๋์์ ๋ง๋ญ๋๋ค. ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ ๋ทฐํฌํธ ๋๋น๋ฅผ ํ์ธํ์ฌ ํ๋ฒ๊ฑฐ ๋ฉ๋ด๊ฐ ๋ ์์ ํ๋ฉด์๋ง ํ์๋๋๋ก ํฉ๋๋ค. ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ `nav-container`์ ๋๋น๋ฅผ ํ์ธํ์ฌ ์ปจํ ์ด๋๊ฐ ์ ํ๋ ๊ฒฝ์ฐ(์: ์ฌ์ด๋๋ฐ ๋ด) ๋ ํฐ ํ๋ฉด์์๋ ๋ด๋น๊ฒ์ด์ ์ด ์ ์ํ ์ ์๋๋ก ํฉ๋๋ค.
2. ์นด๋ ๋ ์ด์์ ์กฐ์
์นด๋ ๋ ์ด์์์ ์น ๋์์ธ์์ ํํ ์ฌ์ฉ๋ฉ๋๋ค. ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณต๊ฐ์ ๋ฐ๋ผ ์นด๋ ๋ ์ด์์์ ์กฐ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค:
- ์ปจํ ์ด๋๊ฐ ์ถฉ๋ถํ ๋์ ๋ ์นด๋ ์ ๋ชฉ๊ณผ ์ด๋ฏธ์ง๋ฅผ ๋๋ํ ํ์ํฉ๋๋ค.
- ์ปจํ ์ด๋๊ฐ ์ข์ ๋ ์ ๋ชฉ๊ณผ ์ด๋ฏธ์ง๋ฅผ ์์ง์ผ๋ก ์์ต๋๋ค.
- ์ปจํ ์ด๋๊ฐ ์ถฉ๋ถํ ๋๊ณ ๋ํ ์ถฉ๋ถํ ๋์ ๋๋ง ์ ์ฒด ์ค๋ช ์ ํ์ํฉ๋๋ค.
/* CSS (Conceptual) */
.card-container {
container: card-container / inline-size block-size;
}
@container card-container (min-width: 500px) {
.card {
display: flex; /* Side-by-side layout */
}
}
@container card-container (min-width: 700px) {
@container card-container (min-height: 400px) {
.card-description {
display: block; /* Show full description */
}
}
}
์ด๋ฅผ ํตํด ์นด๋๋ ๋ค์ํ ์ปจํ ์ด๋ ํฌ๊ธฐ์ ์ ๋์ ์ผ๋ก ์ ์ํ์ฌ ํ์ด์ง์ ์ด๋ ์์น์ ์๋ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
3. ๋ฐ์ํ ํ ์ด๋ธ ์ด
ํ ์ด๋ธ์ ๋ฐ์ํ์ผ๋ก ๋ง๋๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ปจํ ์ด๋ ์ฟผ๋ฆฌ, ํนํ ๊ต์ฐจ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณต๊ฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์ด์ ์จ๊ธฐ๊ฑฐ๋ ์ฌ์ ๋ ฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๊ฐ ๋ง์ ํ ์ด๋ธ์์ ๋ ์ค์ํ ํน์ ์ด์ ์ปจํ ์ด๋๊ฐ ์ถฉ๋ถํ ๋์ ๋๋ง ๋ณด์ด๋๋ก ํ ์ ์์ต๋๋ค.
/* CSS (Conceptual) */
.table-container {
container: table-container / inline-size;
overflow-x: auto; /* Enable horizontal scrolling if needed */
}
@container table-container (min-width: 800px) {
.table-column--details {
display: table-cell; /* Show details column */
}
}
@container table-container (min-width: 1000px) {
.table-column--actions {
display: table-cell; /* Show actions column if there is additional room */
}
}
overflow-x: auto; ์์ฑ์ ํ
์ด๋ธ์ด ์ปจํ
์ด๋ ๋๋น๋ฅผ ์ด๊ณผํ ๋ ์ํ์ผ๋ก ์คํฌ๋กค๋ ์ ์๋๋ก ๋ณด์ฅํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์ด๋ ์ฝํ
์ธ ๊ฐ ์๋ฆฌ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ํน์ ์ด ํด๋์ค(.table-column--details, .table-column--actions)๋ HTML ๋ด์ ์ ์ ํ ํ
์ด๋ธ ์
(<td> ์์)์ ์ ์ฉ๋์ด์ผ ํฉ๋๋ค.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ ์์ ์ ํ ๋ ์ผ๋์ ๋์ด์ผ ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋จ์ํ๊ฒ ์ ์งํ์ธ์: ์ง๋์น๊ฒ ๋ณต์กํ ๊ต์ฐจ๋ ํผํ์ธ์. ์กฐ๊ฑด์ ๋ง์ด ์ถ๊ฐํ ์๋ก ์ปดํฌ๋ํธ์ ๋์์ ์ถ๋ก ํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง๋๋ค.
- ๊ฐ๋ ์ฑ์ ์ฐ์ ์ํ์ธ์: ํ์ ๊ฐ์ฅ ๊ฐ๋ ์ฑ ์๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๊ตฌํ ๋ฐฉ๋ฒ์ ์ ํํ์ธ์. ์๋ฅผ ๋ค์ด, CSS ์ฌ์ฉ์ ์ ์ ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๋๋ผ๋ ๊ฐ๋ ์ฑ์ ํฅ์์ํจ๋ค๋ฉด ์ฌ๋ฐ๋ฅธ ์ ํ์ผ ์ ์์ต๋๋ค.
- ์ฒ ์ ํ ํ ์คํธํ์ธ์: ๋ค์ํ ์ปจํ ์ด๋ ํฌ๊ธฐ์์ ์ปดํฌ๋ํธ๋ฅผ ํ ์คํธํ์ฌ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ์ธ์. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์ปจํ ์ด๋ ํฌ๊ธฐ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ์ธ์.
- ์ฑ๋ฅ์ ๊ณ ๋ คํ์ธ์: ํนํ JavaScript ํด๋ฐฑ์ด๋ ๋ณต์กํ CSS ์ ํ์๋ฅผ ์ฌ์ฉํ ๋ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ผ๋์ ๋์ธ์. ์ฝ๋๋ฅผ ํ๋กํ์ผ๋งํ์ฌ ์ ์ฌ์ ์ธ ๋ณ๋ชฉ ํ์์ ์๋ณํ์ธ์.
- ์๋งจํฑ HTML์ ์ฌ์ฉํ์ธ์: ์ ์ ํ HTML ๊ตฌ์กฐ๋ ์ ๊ทผ์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํด ๋งค์ฐ ์ค์ํฉ๋๋ค. HTML์ด ์ ๊ตฌ์ฑ๋์ด ์๊ณ ์ ์ ํ ์๋งจํฑ ์์๋ฅผ ์ฌ์ฉํ๋์ง ํ์ธํ์ธ์.
- ์ฝ๋๋ฅผ ๋ฌธ์ํํ์ธ์: ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๋ก์ง์ ๋ช ํํ๊ฒ ๋ฌธ์ํํ์ฌ ๋ค๋ฅธ ๊ฐ๋ฐ์(๊ทธ๋ฆฌ๊ณ ๋ฏธ๋์ ์์ )๊ฐ ์ฝ๊ฒ ์ดํดํ๊ณ ์ ์ง ๊ด๋ฆฌํ ์ ์๋๋ก ํ์ธ์.
- ํด๋ฐฑ์ ์ ๊ณตํ์ธ์: ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ์ง ์๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํด ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๊ณตํ์ธ์.
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํ์ฉํ์ธ์: ์ต์ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ์ฌํ๊ณ ๋๋ฒ๊น ํ๋ ๋ฐ ํ๋ฅญํ ์ง์์ ์ ๊ณตํฉ๋๋ค. ์ด ๋๊ตฌ๋ค์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๊ฐ ๋ค์ํ ์ปจํ ์ด๋ ํฌ๊ธฐ์ ์ด๋ป๊ฒ ์ ์ํ๋์ง ์๊ฐํํ์ธ์.
๋ฐ์ํ ๋์์ธ์ ๋ฏธ๋
์ปจํ ์ด๋ ์ฟผ๋ฆฌ, ํนํ ์ด๋ฅผ ๊ฒฐํฉํ๋ ๊ธฐ์ ์ ๋ฐ์ํ ์น ๋์์ธ์์ ์ค์ํ ์ง์ ์ ๋ํ๋ ๋๋ค. ๊ฐ๋ฐ์๋ ์ด๋ฅผ ํตํด ๋ ์ ์ฐํ๊ณ , ์ ์์ฑ ์์ผ๋ฉฐ, ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ง์์ด ๊ณ์ํด์ ํฅ์๋จ์ ๋ฐ๋ผ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ํดํท์์ ์ ์ ๋ ํ์์ ์ธ ๋๊ตฌ๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ๋ฅผ ๋ง์คํฐํจ์ผ๋ก์จ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ์ ๋ชจ๋ ์ ์ฌ๋ ฅ์ ๋ฐํํ๊ณ ์ด๋ค ์ปจํ ์คํธ์๋ ์ํํ๊ฒ ์ ์ํ๋ ์ง์ ํ ๋ฐ์ํ ์น ๊ฒฝํ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๋ค์ํ ๊ตฌํ ๋ฐฉ๋ฒ์ ํ์ํ๊ณ , ์ค์ฉ์ ์ธ ์์ ๋ฅผ ์คํํ๋ฉฐ, ์ปจํ ์ด๋ ๊ธฐ๋ฐ ๋ฐ์์ฑ์ ํ์ ๋ฐ์๋ค์ด์ธ์!
์ ๊ทผ์ฑ ๊ณ ๋ ค์ฌํญ
์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํํ ๋๋ ์ ๊ทผ์ฑ์ ๊ณ ๋ คํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. ๋ฐ์ํ ๋์์ธ ์ ํ์ด ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์์๊ฒ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ํ์ธ์.
- ํ
์คํธ ํฌ๊ธฐ: ๋ชจ๋ ์ปจํ
์ด๋ ํฌ๊ธฐ์์ ํ
์คํธ๊ฐ ์ฝ๊ธฐ ์ฌ์ด ์ํ๋ฅผ ์ ์งํ๋๋ก ํ์ธ์. ๊ณ ์ ๋ ๊ธ๊ผด ํฌ๊ธฐ ์ฌ์ฉ์ ํผํ์ธ์.
em์ด๋rem๊ณผ ๊ฐ์ ์๋ ๋จ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. - ์์ ๋๋น: ๋ชจ๋ ์ปจํ ์ด๋ ํฌ๊ธฐ์์ ํ ์คํธ์ ๋ฐฐ๊ฒฝ ๊ฐ์ ์ถฉ๋ถํ ์์ ๋๋น๋ฅผ ์ ์งํ์ธ์.
- ํค๋ณด๋ ํ์: ๋ชจ๋ ์ํธ์์ฉ ์์๊ฐ ํค๋ณด๋ ํ์์ ํตํด ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํ์ธ์. ํญ ์์๋ ๋ค์ํ ์ปจํ ์ด๋ ํฌ๊ธฐ์์ ๋ ผ๋ฆฌ์ ์ด๊ณ ์ผ๊ด์ฑ์ ์ ์งํด์ผ ํฉ๋๋ค.
- ํฌ์ปค์ค ํ์๊ธฐ: ์ํธ์์ฉ ์์๋ฅผ ์ํด ๋ช ํํ๊ณ ๋์ ๋๋ ํฌ์ปค์ค ํ์๊ธฐ๋ฅผ ์ ๊ณตํ์ธ์.
- ์คํฌ๋ฆฐ ๋ฆฌ๋ ํธํ์ฑ: ์คํฌ๋ฆฐ ๋ฆฌ๋๋ก ๋ฐ์ํ ๋์์ธ์ ํ ์คํธํ์ฌ ์ฝํ ์ธ ๊ฐ ๋ ผ๋ฆฌ์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ๋ฐฉ์์ผ๋ก ์ ๊ณต๋๋์ง ํ์ธํ์ธ์.
๊ฒฐ๋ก
CSS ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๊ต์ฐจ๋ ๊ณ ๊ธ ๋ฐ์ํ ๋์์ธ ๊ธฐ๋ฅ์ ์ ๊ธ ํด์ ํ๋ ๊ฐ๋ ฅํ ๊ธฐ์ ์ ๋๋ค. ์ฌ๋ฌ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ๊ฒฐํฉํจ์ผ๋ก์จ ํ๊ฒฝ์ ์ง๋ฅ์ ์ผ๋ก ๋ฐ์ํ๋ ๋งค์ฐ ์ ์์ฑ ์๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ฌ๋ฌ ๊ตฌํ ์ ๊ทผ ๋ฐฉ์์ด ์์ง๋ง, ํต์ฌ์ ํ๋ก์ ํธ์ ์๊ตฌ์ ๊ฐ์ฅ ์ ํฉํ ๋ฐฉ๋ฒ์ ์ ํํ๊ณ ๊ฐ๋ ์ฑ, ์ ์ง ๊ด๋ฆฌ์ฑ ๋ฐ ์ ๊ทผ์ฑ์ ์ฐ์ ์ํ๋ ๊ฒ์ ๋๋ค. ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ง์์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ด๋ฌํ ๊ธฐ์ ์ ๋ง์คํฐํ๋ ๊ฒ์ ํ๋์ ์ด๊ณ ๋ฐ์์ฑ ์๋ ์น ๊ฒฝํ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ผ ๊ฒ์ ๋๋ค.